#include "expression.h"

Expression::Expression()
{

}

/////
///// \brief Expression::level
///// \param theOpt
///// 为每一个操作符返回一个数，数越大优先级越高
///// \return
/////
//int Expression::level(char theOpt){
//    for(int i = 0; i < 7; i++){
//        if(theOpt == opt_set[i])
//            return i;
//    }
//    return -1;
//}

/////
///// \brief Expression::in_set
///// \param theChar
///// 判断输入的操作符是否合法
///// \return
/////
//bool Expression::in_set(char theChar){
//    for(int i = 0; i < 7; i++){
//        if(theChar == opt_set[i])
//            return true;
//    }
//    return false;
//}


/////
///// \brief Expression::del_space
///// \param theString
///// 用于去除空格并检查是否有非法字符
///// \return
/////
//bool Expression::del_space(QString &theString){
//     QString res;
//     for(int i = 0; i < theString.length(); i++){
//         if(theString[i] == ' '){
//             ;
//         }else{
//            res += theString[i];
//         }
////         if(in_set(theString[i])){
////         }
////         else{
////             QString dlgTitle="QMavPlotter(QMP)";
////             QString strInfo="Invalid expression";
////             QMessageBox::critical(this, dlgTitle, strInfo);
////             return false;
////         }
//     }
//     theString = res;
//     return true;
//}

/////
///// \brief Expression::change
///// \param from
///// \param to
///// 将中缀表达式转换成后缀表达式
///// \return
/////
//bool Expression::change(QString &from, QStringList &to){
//    int theInt = 0;        // 暂存数字
//    int state = OUT;     // 初始状态：在数字外
//    char c;
//    /*
//    if(from[from.length() - 1] != '='){
//        cout << "等于号语法有误！" << endl;
//        return false;
//    }
//    */
//    for(int i = 0; i < from.length(); i++){
//        c = from[i];
//        if(isdigit(c)){
//            theInt *= 10;
//            theInt += c - '0';
//            state = IN;    // 状态：在数字内
//        }
//        else{
//            if(state == IN){        // 刚刚处理了数字
//                to += to_string(theInt) + ' ';
//                theInt = 0;
//            }
//            if(c == '='){
//                /*
//                if(i != from.length() - 1){
//                    cout << "等于号语法有误！" << endl;
//                    return false;
//                }
//                */
//                break;
//            }
//            else if(c == '(')
//                opt.push(c);
//            else if(c == ')'){
//                while(!opt.empty() && opt.top() != '('){
//                    to += opt.top();
//                    to += ' ';
//                    opt.pop();
//                }
//                /*
//                if(opt.empty()){
//                    cout << "括号匹配有误！" << endl;
//                    return false;
//                }
//                else
//                */
//                    opt.pop();
//            }
//            else{
//                while(true){
//                    if(opt.empty() || opt.top() == '(')
//                        opt.push(c);
//                    else if(level(c) > level(opt.top()))
//                        opt.push(c);
//                    else{
//                        to += opt.top();
//                        to += ' ';
//                        opt.pop();
//                        continue;
//                    }
//                    break;
//                }
//            }
//            state = OUT;    // 状态：在数字外
//        }
//    }
//    while(!opt.empty()){
//        /*
//        if(opt.top() == '('){
//            cout << "括号匹配有误！" << endl;
//            return false;
//        }
//        */
//        to += opt.top();
//        to += ' ';
//        opt.pop();
//    }
//    return true;
//}

/////
///// \brief Expression::compute
///// \param theExp
///// \return
/////
//bool Expression::compute(string &theExp){
//    int theInt = 0;        // 暂存数字
//    int state = OUT;     // 初始状态：在数字外
//    char c;
//    for(int i = 0; i < theExp.length(); i++){
//        c = theExp[i];
//        if(isdigit(c)){
//            theInt *= 10;
//            theInt += c - '0';
//            state = IN;    // 状态：在数字内
//        }
//        else{
//            if(state == IN){        // 刚刚处理了数字
//                val.push(theInt);
//                theInt = 0;
//            }
//            double x, y;
//            if(c != ' '){
//                /*
//                if(val.empty()){
//                    cout << "操作数语法错误！" << endl;
//                    return false;
//                }
//                */
//                x = val.top();
//                val.pop();
//                /*
//                if(val.empty()){
//                    cout << "操作数语法错误！" << endl;
//                    return false;
//                }
//                */
//                y = val.top();
//                val.pop();
//                switch(c){
//                    case '+':
//                        val.push(x + y);
//                        break;
//                    case '-':
//                        val.push(y - x);
//                        break;
//                    case '*':
//                        val.push(x * y);
//                        break;
//                    case '/':
//                        val.push(y / x);
//                        break;
//                    default:
//                        cout << "未知的错误！" << endl;
//                }
//            }
//            state = OUT;
//        }
//    }
//    /*
//    if(val.size() != 1){
//        cout << "缺少操作符！" << endl;
//        return false;
//    }
//    */
//    return true;
//}
